
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>如何在Spring Boot中配置分布式配置中心 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>如何在Spring Boot中配置分布式配置中心 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">在微服务架构中，为什么推荐使用分布式配置中心来管理配置？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">因为在微服务环境中，服务数量众多，如果每个服务都维护自己的配置文件，管理和更新这些配置将变得极具挑战性。分布式配置中心通过集中管理所有服务的配置，可以提高管理效率，减少因配置不一致带来的潜在错误。</div>
          </div>
          <div class="card-source">来源: 如何在Spring Boot中配置分布式配置中心</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">分布式配置中心通常具备哪些核心特性？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">分布式配置中心的核心特性包括：1. 集中管理，简化配置管理的复杂性；2. 动态配置，支持在不重启服务的情况下实时更新配置；3. 环境隔离，为开发、测试、生产等不同环境提供隔离的配置；4. 安全性，提供加密和权限管理功能保护敏感信息；5. 可扩展性与适应性，能够处理大量配置项和服务实例；6. 与CI/CD流程集成，实现配置的自动化管理。</div>
          </div>
          <div class="card-source">来源: 分布式配置中心的概念</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">Spring Cloud Config是如何支持配置的版本控制的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Spring Cloud Config的配置存储可以与Git、SVN等版本控制系统集成。这意味着每次对配置的修改都可以被追踪和版本控制，使开发团队能够轻松回溯到历史配置状态，从而提高了安全性和问题排查的效率。</div>
          </div>
          <div class="card-source">来源: Spring Cloud Config 概述</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">如何将一个Spring Boot项目配置为Spring Cloud Config Server？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">主要有三个步骤：1. 在项目的依赖中添加 `Spring Cloud Config Server`。 2. 在主应用类上使用 `@EnableConfigServer` 注解来启用Config Server功能。 3. 在 `application.yml` 或 `application.properties` 文件中，配置配置源的后端，例如使用 `spring.cloud.config.server.git.uri` 指定一个Git仓库地址。</div>
          </div>
          <div class="card-source">来源: 配置 Config Server</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">Spring Cloud Config Client应用如何连接到Config Server并指定其服务名称？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">客户端应用需要在其 `application.yml` 或 `application.properties` 文件中进行配置。通过 `spring.cloud.config.uri` 属性设置Config Server的地址，并通过 `spring.application.name` 属性指定客户端的服务名称，以便Config Server能够找到对应的配置文件。</div>
          </div>
          <div class="card-source">来源: 配置 Config Client</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">在Spring Cloud中实现配置热更新（动态刷新）的原理是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">配置热更新的实现依赖于三个核心组件：1. Spring Cloud Config 作为集中配置中心。 2. Spring Boot Actuator 提供一个用于触发配置刷新的端点（如 `/actuator/refresh`）。 3. `@RefreshScope` 注解用于标记需要动态刷新的Bean，当刷新事件发生时，这些Bean会被重新加载以获取新配置。</div>
          </div>
          <div class="card-source">来源: 配置热更新</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">在一个启用了热更新的Spring Boot应用中，如何手动触发配置的刷新？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">首先，需要在 `application.yml` 中通过 `management.endpoints.web.exposure.include: refresh` 来暴露 `refresh` 端点。然后，向该应用的 `/actuator/refresh` 端点发送一个POST请求即可手动触发配置刷新，例如使用cURL命令：`curl -X POST http://localhost:8080/actuator/refresh`。</div>
          </div>
          <div class="card-source">来源: 配置热更新</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">`@RefreshScope`注解在配置热更新机制中扮演了什么角色？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">`@RefreshScope` 注解用于标记一个Bean，使其具备动态刷新的能力。当配置更新并触发刷新事件后，所有被 `@RefreshScope` 标记的Bean的实例都会被重新创建，从而能够注入最新的配置属性值，而无需重启整个应用程序。</div>
          </div>
          <div class="card-source">来源: 配置热更新</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">Spring Security框架包含哪些核心组件，它们各自的功能是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Spring Security的核心组件包括：<br>1. Authentication (认证): 验证用户身份的过程。<br>2. Authorization (授权): 决定用户是否有权限访问特定资源。<br>3. Security Context (安全上下文): 保存当前用户的安全信息。<br>4. Filters (过滤器): 在请求处理链中用于拦截和处理请求的组件。</div>
          </div>
          <div class="card-source">来源: 安全配置</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
